﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ZR.Infrastructure
{
    // 自定义固定长度且线程安全的列表类
    public class SafeList<T>
    {
        private readonly List<T> _list;
        private readonly int _maxSize;
        private readonly object _lockObject = new object();

        // 构造函数，初始化列表和最大长度
        public SafeList(int maxSize = -1)
        {
            _list = new List<T>();
            _maxSize = maxSize;
        }

        // 添加元素的方法
        public void Add(T item)
        {
            lock (_lockObject)
            {
                if (_maxSize>-1  && _list.Count >= _maxSize)
                {
                    // 如果列表已满，移除第一个元素
                    _list.RemoveAt(0);
                }
                _list.Add(item);
            }
        }

        // 获取指定索引的元素
        public T this[int index]
        {
            get
            {
                lock (_lockObject)
                {
                    return _list[index];
                }
            }
        }

        // 获取列表当前的元素数量
        public int Count
        {
            get
            {
                lock (_lockObject)
                {
                    return _list.Count;
                }
            }
        }

        // 清空列表
        public void Clear()
        {
            lock (_lockObject)
            {
                _list.Clear();
            }
        }

        // 将列表元素转换为数组
        public T[] ToArray()
        {
            lock (_lockObject)
            {
                return _list.ToArray();
            }
        }

        // 将列表元素转换为新的 List<T>
        public List<T> ToList()
        {
            lock (_lockObject)
            {
                return new List<T>(_list);
            }
        }
    }
}
